"""
    进程之间可以通过队列（Queue）进行通讯，
    队列是一种先进先出（FIFO）的数据结构。

    创建队列的语法结构：
        队列对象 = Queue(N)

【常用方法】
    方法名称                    功能描述
    qsize()                   获取当前队列包含的消息数量
    empty()                   判断队列是否为空，为空结果为 True，否则为 False
    full()                    判断队列是否满了，满了结果为 True，否则为 False
    get(block=True)           获取队列中的一条消息，然后从队列中移除，block默认值为 True
    get_nowait()              相当于 get(block=False)，消息队列为空时，抛出异常
    put(item, block=True)     将 item 消息放入队列，block 默认为 True
    put_nowait(item)          相当于 put(item, block=False)

"""
from multiprocessing import Queue
# from queue import Queue

if __name__ == '__main__':
    # 创建一个队列
    q = Queue(3)        # 最多可以接收3条信息
    print('队列是否为空：', q.empty())
    print('队列是否为满：', q.full())
    # 向队列中添加信息
    q.put('hello')
    q.put('world')
    print('队列是否为空：', q.empty())
    print('队列是否为满：', q.full())
    q.put('!')
    print('队列是否为空：', q.empty())
    print('队列是否为满：', q.full())
    print('队列当中信息的个数：', q.qsize())
    # 出队
    print(q.get())
    print('队列当中信息的个数：', q.qsize())
    # 入队
    q.put_nowait('html')
    # q.put_nowait('sql')   # queue.Full
    # q.put('sql')          # 不报错，会一直等待，等到队列中有空位置
    # 遍历
    if not q.empty():
        for i in range(q.qsize()):
            print(q.get_nowait())   # nowait() 不等待
